﻿using System.Globalization;
using System.Web.Routing;
using System.Web.WebPages.Resources;

namespace System.Web.WebPages.ApplicationParts {
    internal class ResourceRouteHandler : IRouteHandler {
        private ApplicationPartRegistry _partRegistry;

        public ResourceRouteHandler(ApplicationPartRegistry partRegistry) {
            _partRegistry = partRegistry;
        }

        public IHttpHandler GetHttpHandler(RequestContext requestContext) {
            // Get the package name and static resource path from the route
            string partName = (string)requestContext.RouteData.GetRequiredString("module");

            // Try to find an application module by this name
            ApplicationPart module = _partRegistry[partName];
        
            // Throw an exception if we can't find the module by name
            if (module == null) {
                throw new InvalidOperationException(
                    String.Format(CultureInfo.CurrentCulture, 
                    WebPageResources.ApplicationPart_ModuleCannotBeFound, partName));
            }

            // Get the resource path
            string path = (string)requestContext.RouteData.GetRequiredString("path");

            // Return the resource handler for this module and path
            return new ResourceHandler(module, path);
        }
    }
}
